package com.ihrm.common.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.Map;

/**
 * @author 小伟
 * @version V1.0
 * @Package com.ihrm.common.utils
 * @date 2020/12/15 17:03
 * @Copyright © 2020-2021 郑州恒星科技有限责任公司
 * JWT工具类
 */
//@ConfigurationProperties("jwt.config")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class JwtUtils {
    /**
     * token秘钥
     */
    private String key;
    /**
     * 过期时间 ms单位
     */
    private long ttl;

    /**
     * 生成token
     * @return token
     */
    public String creatJwtToken(String id, String name, Map<String,Object> map) {
        //1.创建JwtBuilder对象,设置相关属性
        JwtBuilder builder = Jwts.builder().setId(id)
                .setSubject(name)
                .setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256,key);
        //2.使用map集合保存用户自己构造的数据
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            builder.claim(entry.getKey(), entry.getValue());
        }
        //3.设置token失效时间
        builder.setExpiration(new Date(System.currentTimeMillis() + ttl));
        //4.调用compact()方法生成token
        String token = builder.compact();
        return token;
    }

    /**
     * 解析token
     * @param token token令牌
     * @return Claims 对象
     */
    public Claims parseJwtToken(String token) {
      return   Jwts.parser()
                .setSigningKey(key)
                .parseClaimsJws(token)
                .getBody();
    }

}
